#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
// #define int long long
int n,k;
string str,s;
bool vis[1004],a[1005];
//
// n k <>  ^1? 0/1ci
int dp[1005][1005][3][2][2];
long long solve(){
    int len=str.size();
    // cout<<len<<"\n";
    for(int i=1;i<len;i++){
        vis[i]=str[i]-'0';
    }
    len--;
    long long ans=1;
    memset(dp,0,sizeof(dp));
    dp[0][k][1][0][0]=1;dp[0][k][1][1][0]=1;
    dp[0][k][1][0][1]=1;dp[0][k][1][1][1]=1;

    cout<<len<<"\n";
    for(int i=1;i<=len;i++){
        cout<<"solve "<<i<<"\n";
        for(int j=0;j<=k;j++){
            for(int na=0;na<=2;na++){
                for(int nb=0;nb<=1;nb++){
                    // cout<<nb<<'\n';
                    if(j>0){
                        int np=na,nq=nb,nk=j;nk--;
                        bool st;
                        nq^=1;
                        st=a[i]^nb;
                        if(vis[i]>st&&np==1)np=0;
                        if(vis[i]<st&&np==1)np=2;
                        // cout<<na<<" "<<nb<<"->"<<np<<" "<<nq<<'\n';
                        dp[i][nk][np][nq][0]=(dp[i][nk][np][nq][0]+dp[i-1][j][na][nb][0])%mod;
                        dp[i][nk][np][nq][1]=(dp[i][nk][np][nq][1]+dp[i-1][j][na][nb][1]*2%mod+dp[i-1][j][na][nb][0]*st%mod)%mod;
                    }
                    int np=na,nq=nb,nk=j;
                    bool st;
                    st=a[i]^nb;
                    if(vis[i]>st&&np==1)np=0;
                    if(vis[i]<st&&np==1)np=2;
                    // cout<<j<<":"<<na<<" "<<nb<<"->"<<np<<" "<<nq<<'\n';
                    dp[i][nk][np][nq][0]=(dp[i][nk][np][nq][0]+dp[i-1][j][na][nb][0])%mod;
                    dp[i][nk][np][nq][1]=(dp[i][nk][np][nq][1]+dp[i-1][j][na][nb][1]*2%mod+dp[i-1][j][na][nb][0]*st%mod)%mod;
                }
            }
        }
        //3-1=2-1=1
        //
        // cout<<n<<" "<<i-1<<'\n';
        
        for(int j=0;j<=min(n-i,k);j++){
            for(int na=0;na<=2;na++){
                if(i==len&&na==2)continue;
                for(int nb=0;nb<=1;nb++){
                    cout<<dp[i][j][na][nb][1]<<" ";
                    ans=(ans+dp[i][j][na][nb][1])%mod;
                }
                cout<<'\n';
            }
            cout<<"\n";
        }
    }
    //
    return ans;
}
signed main() {
    freopen("lost.in","r",stdin);
    freopen("lost.out","w",stdout);
    // int n,k;
    cin>>n>>k;
    cin>>s;s=" "+s;
    for(int i=n-1;i>=1;i--)a[i]=(s[i]=='R');
    long long ans=0;
    cin>>str;
    for(int i=str.size()-1;i>=0;i--){
        ans=(ans*2+str[i]-'0')%mod;
    }
    ans-=solve();
    cin>>str;
    ans+=solve();
    ans=(ans%mod+mod)%mod;
    cout<<ans<<'\n';
    return 0;
}
/*


*/